package br.com.velp.sudecap.serviceimpl;

import br.com.velp.sudecap.comum.SpringConstants;
import br.com.velp.sudecap.dao.LogEventoDAO;
import br.com.velp.sudecap.entidade.EntityBase;
import br.com.velp.sudecap.entidade.LogEvento;
import br.com.velp.sudecap.entidade.Usuario;
import br.com.velp.sudecap.enumerator.FuncionalidadeEnum;
import br.com.velp.sudecap.enumerator.TipoEventoEnum;
import br.com.velp.sudecap.service.LogEventoService;
import br.com.velp.sudecap.util.JsfUtil;
import java.util.List;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.07.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> N/A </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Pela Manipulação
 *             dos Registros de Logs de Eventos do Sistema
 * </descricao>
 * </sumario>
 */
@Service("logEventoService")
@Lazy(SpringConstants.LAZY_BEANS)
@Transactional(readOnly = true)
public class LogEventoServiceImpl implements LogEventoService {
    
    public static final Long serialVersionUID = 1l;
    
    @Autowired
    private LogEventoDAO logEventoDAO;
    
    @Override
    @Transactional(readOnly = false)
    public void registrarLogEvento(TipoEventoEnum tipoEvento, Usuario usuario, String descricao, Long idRegistro, String controlador, String registroXml){
        this.logEventoDAO.registrarLogEvento(tipoEvento, usuario, descricao, idRegistro, controlador, registroXml);
    }
    
    @Override
    @Transactional(readOnly = false)
    public void registrarLogEventoExclusao(Object value, String descricao, String controller) {
        
        Long idRegistro = (Long) ((EntityBase) value).getId();
        
        this.logEventoDAO.registrarLogEvento(
                TipoEventoEnum.ULTIMOS_CADASTROS_EXCLUIDOS, 
                JsfUtil.getUsuarioLogado(), 
                descricao, 
                idRegistro, 
                controller,
                null);
        
    }
    
    @Override
    @Transactional(readOnly = false)
    public void registrarLogEventoCadastro(Long idRegistro, FuncionalidadeEnum funcionalidade, String controller) {
        
        this.logEventoDAO.registrarLogEvento(
                TipoEventoEnum.ULTIMOS_CADASTROS_EFETUADOS, 
                JsfUtil.getUsuarioLogado(), 
                funcionalidade.getDescricao(), 
                idRegistro, 
                controller, 
                null);     
        
    }
    
    @Override
    @Transactional(readOnly = false)
    public void registrarLogEventoAlteracao(Long idRegistro, FuncionalidadeEnum funcionalidade, String controller) {
        
        this.logEventoDAO.registrarLogEvento(
                TipoEventoEnum.ULTIMOS_CADASTROS_ALTERADOS, 
                JsfUtil.getUsuarioLogado(), 
                funcionalidade.getDescricao(), 
                idRegistro, 
                controller,
                null);   
        
    }
    
}
